// var i;
// var $eventManager = require("./EventManager");
// var $resKeeper = require("./ResKeeper");
// var $evenType = require("./EvenType");
// var $redPointControl = require("./RedPointControl");
// var d = cc._decorator;
// var p = d.ccclass;
// var h = d.property;
// var f =
//     (d.inspector,
//     (function (e) {
//         function t() {
//             var t = (null !== e && e.apply(this, arguments)) || this;
//             t.redPoints = [];
//             t.redPointNode = null;
//             return t;
//         }
//         __extends(t, e);
//         t.prototype.onEnable = function () {
//             this.Show();
//             $eventManager.EventMgr.addEventListener(
//                 $evenType.EVENT_TYPE.MainRedPointChange,
//                 this.OnRedPointChange,
//                 this
//             );
//         };
//         t.prototype.onDisable = function () {
//             $eventManager.EventMgr.rmEventListener(
//                 $evenType.EVENT_TYPE.MainRedPointChange,
//                 this.OnRedPointChange,
//                 this
//             );
//         };
//         t.prototype.Show = function () {
//             var e = !1;
//             for (var t = 0; t < this.redPoints.length; t++) {
//                 var o = this.redPoints[t];
//                 if ($redPointControl.RedPointCtrl.GetRedPointByType(o)) {
//                     e = !0;
//                     break;
//                 }
//             }
//             this.redPointNode.active = e;
//         };
//         t.prototype.OnRedPointChange = function (e) {
//             if (!(e && -1 == this.redPoints.indexOf(e))) {
//                 this.Show();
//             }
//         };
//         __decorate(
//             [
//                 h({
//                     type: [cc.Enum($redPointControl.RedPointType)],
//                     tooltip: "需要完成的红点类型"
//                 })
//             ],
//             t.prototype,
//             "redPoints",
//             void 0
//         );
//         __decorate([h(cc.Node)], t.prototype, "redPointNode", void 0);
//         return __decorate([p], t);
//     })($resKeeper.default));
// exports.default = f;

// import { EventMgrInstance } from "./EventManager";
// import ResKeeper from "./ResKeeper";
// import { EVENT_TYPE } from "./EvenType";
// import { RedPointCtrlInstance, RedPointType } from "./RedPointControl";

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * RedPointComponent 类
//  * 建议类名: RedPointComponent
//  */
// @ccclass
// class RedPointComponent extends ResKeeper {
//     /** 需要完成的红点类型 */
//     @property({
//         type: [cc.Enum(RedPointType)],
//         tooltip: "需要完成的红点类型"
//     })
//     redPoints: RedPointType[] = [];

//     @property(cc.Node)
//     redPointNode: cc.Node = null;

//     /**
//      * 当组件启用时调用
//      * 建议方法名: handleEnable
//      */
//     onEnable(): void {
//         this.show();
//         EventMgrInstance.addEventListener(
//             EVENT_TYPE.MainRedPointChange,
//             this.onRedPointChange,
//             this
//         );
//     }

//     /**
//      * 当组件禁用时调用
//      * 建议方法名: handleDisable
//      */
//     onDisable(): void {
//         EventMgrInstance.rmEventListener(
//             EVENT_TYPE.MainRedPointChange,
//             this.onRedPointChange,
//             this
//         );
//     }

//     /**
//      * 显示红点
//      * 建议方法名: displayRedPoint
//      */
//     show(): void {
//         let hasRedPoint = false;
//         for (let i = 0; i < this.redPoints.length; i++) {
//             const redPointType = this.redPoints[i];
//             if (RedPointCtrlInstance.GetRedPointByType(redPointType)) {
//                 hasRedPoint = true;
//                 break;
//             }
//         }
//         this.redPointNode.active = hasRedPoint;
//     }

//     /**
//      * 红点变化时的回调
//      * @param event 红点类型
//      * 建议方法名: handleRedPointChange
//      */
//     onRedPointChange(event: RedPointType): void {
//         if (event && this.redPoints.indexOf(event) !== -1) {
//             this.show();
//         }
//     }
// }

// export default RedPointComponent;

import { EventMgrInstance } from "./EventManager";
import ResKeeper from "./ResKeeper";
import { EVENT_TYPE } from "./EvenType";
import { RedPointCtrl, RedPointType } from "./RedPointControl";

const { ccclass, property, inspector } = cc._decorator;

/**
 * RedPointComponent 类
 * 建议类名: RedPointComponent
 */
@ccclass
class RedPointComponent extends ResKeeper {
    /** 需要完成的红点类型 */
    @property({
        type: [cc.Enum(RedPointType)],
        tooltip: "需要完成的红点类型"
    })
    redPoints: RedPointType[] = [];

    @property(cc.Node)
    redPointNode: cc.Node = null;

    /**
     * 当组件启用时调用
     * 建议方法名: handleEnable
     */
    onEnable(): void {
        this.displayRedPoint();
        EventMgrInstance.addListener(
            EVENT_TYPE.MainRedPointChange,
            this.handleRedPointChange,
            this
        );
    }

    /**
     * 当组件禁用时调用
     * 建议方法名: handleDisable
     */
    onDisable(): void {
        EventMgrInstance.removeListener(
            EVENT_TYPE.MainRedPointChange,
            this.handleRedPointChange,
            this
        );
    }

    /**
     * 显示红点
     * 建议方法名: displayRedPoint
     */
    displayRedPoint(): void {
        let isRedPointVisible = this.redPoints.some((redPointType) =>
            RedPointCtrl.getRedPointStatusByType(redPointType)
        );
        this.redPointNode.active = isRedPointVisible;
    }

    /**
     * 红点变化时的回调
     * @param redPointType 红点类型
     * 建议方法名: handleRedPointChange
     */
    handleRedPointChange(redPointType: RedPointType): void {
        if (redPointType && this.redPoints.includes(redPointType)) {
            this.displayRedPoint();
        }
    }
}

export default RedPointComponent;